package com.sakura.模拟;

import java.util.ArrayList;
import java.util.List;

public class Code59_螺旋矩阵II {

    public static void main(String[] args) {
        int[][] list = new Code59_螺旋矩阵II().generateMatrix(3);
        for (int[] ints : list) {
            for (int anInt : ints) {
                System.out.print(anInt + " ");
            }
            System.out.println();
        }
    }

    public int[][] generateMatrix(int n) {

        // l 表示左边界，r表示右边界，t表示上边界，b表示下边界
        int num = 1;
        int l = 0, r = n - 1, t = 0, b = n - 1;
        int[][] list = new int[n][n];
        while (true) {
            for (int i = l; i <= r; i++) {
                list[t][i] = num++;
            }
            // 收缩上边界，如果上边界大于下边界，则跳出循环
            if (++t > b) break;
            for (int i = t; i <= b; i++) {
                list[i][r] = num++;
            }
            // 收缩右边界，如果左边界大于右边界，则跳出循环
            if (l > --r) break;
            for (int i = r; i >= l; i--) {
                list[b][i] = num++;
            }
            // 收缩下边界，如果上边界大于下边界，则跳出循环
            if (t > --b) break;
            for (int i = b; i >= t; i--) {
                list[i][l]=num++;
            }
            if (++l > r) break;
        }

        return list;
    }
}
